import pandas as pd
import geopandas as gpd
import libpysal as lp
import matplotlib.pyplot as plt
import seaborn as sns
import geoplot as gplt
import geoplot.crs as gcrs
import plotly.express as px
import rasterio as rio
import numpy as np
import contextily as ctx
import shapely.geometry as geom
import folium
import folium.plugins as plugins
import os
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')# Configuración warnings
# import os
g = os.getcwd()
g
path = r'D:\repos\GEO_CLARO'
os.chdir(path)
de antemanos sabemos que el shape MGN es la capa de centros poblados del igac, en este shape tenemos imforacion sobre la forma, tamanio y area de cada centro poblado del pais
points_late = gpd.read_file("data\points_late.shp")
points_late.head(5)
| FECHA | TEST_ID | N_OPERADOR | DOWNLOAD_M | UPLOAD_MBP | CLASS_LATE | localidad | MES | DIA | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2021-01-28 | 6978771403 | 4 | 10.410156 | 0.640625 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.09600 4.58700) |
| 1 | 2021-01-19 | 6945885369 | 4 | 10.294922 | 4.988281 | 0 | ANTONIO NARIÑO | January | Tuesday | POINT (-74.12100 4.59200) |
| 2 | 2021-01-08 | 6907797685 | 4 | 28.707031 | 4.711914 | 0 | ANTONIO NARIÑO | January | Friday | POINT (-74.10000 4.59000) |
| 3 | 2021-01-21 | 6953823661 | 4 | 53.502930 | 7.201172 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.09500 4.58500) |
| 4 | 2021-01-21 | 6952553476 | 4 | 26.608398 | 6.316406 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.12100 4.59300) |
points_late['FECHA'] = pd.to_datetime(points_late['FECHA'])## transformamos la columna fecha
points_late['MES'] = pd.Categorical(points_late['MES'], categories=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September'])
points_late.head(5)
| FECHA | TEST_ID | N_OPERADOR | DOWNLOAD_M | UPLOAD_MBP | CLASS_LATE | localidad | MES | DIA | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2021-01-28 | 6978771403 | 4 | 10.410156 | 0.640625 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.09600 4.58700) |
| 1 | 2021-01-19 | 6945885369 | 4 | 10.294922 | 4.988281 | 0 | ANTONIO NARIÑO | January | Tuesday | POINT (-74.12100 4.59200) |
| 2 | 2021-01-08 | 6907797685 | 4 | 28.707031 | 4.711914 | 0 | ANTONIO NARIÑO | January | Friday | POINT (-74.10000 4.59000) |
| 3 | 2021-01-21 | 6953823661 | 4 | 53.502930 | 7.201172 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.09500 4.58500) |
| 4 | 2021-01-21 | 6952553476 | 4 | 26.608398 | 6.316406 | 0 | ANTONIO NARIÑO | January | Thursday | POINT (-74.12100 4.59300) |
OP3 = points_late[points_late['N_OPERADOR']==3][['FECHA','CLASS_LATE', 'MES','geometry']]
| FECHA | CLASS_LATE | MES | geometry | |
|---|---|---|---|---|
| 2068 | 2021-01-21 | 0 | January | POINT (-74.10200 4.59200) |
| 2073 | 2021-01-19 | 0 | January | POINT (-74.10100 4.58900) |
| 2077 | 2021-01-18 | 0 | January | POINT (-74.09800 4.58000) |
| 2079 | 2021-01-20 | 0 | January | POINT (-74.10200 4.59200) |
| 2081 | 2021-01-28 | 0 | January | POINT (-74.10200 4.59200) |
| ... | ... | ... | ... | ... |
| 4843908 | 2021-01-30 | 0 | January | POINT (-74.12600 4.47200) |
| 4843909 | 2021-01-31 | 0 | January | POINT (-74.12600 4.47200) |
| 4843910 | 2021-01-31 | 0 | January | POINT (-74.12600 4.47200) |
| 4843911 | 2021-01-31 | 0 | January | POINT (-74.12600 4.47200) |
| 4843912 | 2021-01-31 | 0 | January | POINT (-74.12600 4.47200) |
41095 rows × 4 columns
token = 'pk.eyJ1IjoiZnJhbmRhazIiLCJhIjoiY2t0cHpubW1jMDlmdzJvbXhjZ2o0eHc0ZiJ9.WiHLSWVwG9VYcmBLls4oDg' ## token para usar plotly
px.set_mapbox_access_token(token)#acceder con token
## acomodamos los datos segun las necesidades de la funciones de folium, ya que recibe una lista de cordenadas por fecha
fecha = Comparendos[['LATITUD','LONGITUD','CANTIDAD','FECHA_HORA']]
fecha = fecha.groupby('FECHA_HORA')
array=[]
time_index=[]
for key, group in fecha:
time_index.append(str(key))
array.append(np.array(group[['LATITUD','LONGITUD','CANTIDAD']]))
array = [i.tolist() for i in array]
## creamos un mapa con folium que sea dinamico para ver el hotsplot por dia de nuestros datos.
m = folium.Map([4.6, -74.0], tiles="stamentoner", zoom_start=12)# mapa base
hm = plugins.HeatMapWithTime(array, index=time_index, auto_play=True, max_opacity=0.3) #heatmap diario y con auto play
hm.add_to(m)# lo agregamos al mapa base
m # lo publicamos o mostramos